心理學研究 顯示:「最有效的學習方式,就是教別人。」
我從 Software Engineer 轉職到 Data Engineer 也 4 年了,做雜事的功力進步了,
最近想從基本開始認真學習 Design Data Intensive Applications 這本書所講,所以就來教人啦!
Data engineers 著重在大型資料集收集、分析運算及模型利用,包含數據系統建置、平行化運算、Data Pipeline 設計等等,
也因為前幾年大數據熱的關係,我們也需要會整合、建置諸如 Kafka, Hadoop, Spark 等的工具,
他們熟稔 No-SQL Database,首選的語言就是 SQL,99% 的資料清理都能用 SQL 完成,
其他的程式語言則依喜好決定,但會 Python 是基本。
Software Engineers 則著重在應用軟體設計、開發和維運,如網站的前後端、商業用軟體、Mobile App 開發等等,
他們了解各種演算法,能用不同的程式設計風格開發,也需要懂點 SQL 及資料模型來儲存公司重要交易資料,
若流量大,還得思考平行化程式設計。
資料工程是軟體工程的一環,都是以 computer science 為基礎然後往不同的專業發展,
其實本就沒有明確的界線能區分開來,我周遭同事做 mobile app 開發的也懂 ML 模型,
我們 data engineers 建數據系統但也會做網站的前後端開發,像 BigQuery 那種後台也是需要我們刻前端讓分析師使用,
專業度或許沒專門的工程師這麼高,但訓練一下都是可上戰場的。
數據密集型應用系統 最大的改變就是你 數據量變大、變複雜、速度要快,
想像一下若你公司的業務規模成長到尖峰時 QPS 達 20,000,每天有數以億筆的數據要儲存,
業務的需求包山包海,你要如何設計出能隨時彈性修改欄位 shema 的資料結構?
我們應該都不能接受 alter table add column
或改個資料型態要等半小時且服務還是中斷的情況吧!?
Design Data Intensive Applications 主要就是教你如何快速改變、處理、儲存資料,
這本書不是特定工具的教學,是教這些工具背後使用的技術、原則,
了解這些後就能幫助你挑選適合你使用的工具,也能幫助你思考為什麼工具要這樣設計。
另外強烈建議自己調一遍原文,畢竟我寫的就那樣XD。
本系列文著重在 Data Intensive Application 這本書的學習分享、摘要,再加上在 ETtoday 數據團隊的經驗,
尤其我們沒用任何雲端工具 (GCP, AWS) 去建置我們的數據系統,在架構上也會接觸的比較全面,很多你不想管的東西都要管。
本系列文適合:
希望能與大家分享,我在看這本書時許多 噢,原來是這樣
的心情。